package com.android.mall.adapter;

import java.io.IOException;
import java.io.InputStream;
import java.lang.ref.SoftReference;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;

import android.graphics.drawable.Drawable;
import android.os.Handler;
import android.os.Message;

public class AsyncImageLoader {

	private HashMap<String,SoftReference<Drawable>> imageCache; //image catch
	
	public AsyncImageLoader(){
		imageCache = new HashMap<String,SoftReference<Drawable>>();
	}
	
	public Drawable loadDrawable(final String imageUrl, final ImageCallback imageCallback){
		
		if(imageCache.containsKey(imageUrl)){ //image in HashMap
			SoftReference<Drawable> softReference = imageCache.get(imageUrl);
			Drawable drawable = softReference.get();
			if(drawable != null){
				return drawable;
			}
		}
		
		final Handler handler = new Handler(){
			public void handleMessage(Message message){
				imageCallback.imageLoaded((Drawable)message.obj, imageUrl);
			}
		};
		new Thread(){
			@Override
			public void run(){
				Drawable drawable = loadImageFromUrl(imageUrl); //get image from imageUrl
				imageCache.put(imageUrl, new SoftReference<Drawable>(drawable)); // set image to HashMap
				Message message = handler.obtainMessage(0, drawable); //send drawable with message 
				handler.sendMessage(message);
			}
		}.start();
		
		return null;
	}
	
	public static Drawable loadImageFromUrl(String url){
		
		URL m;
		InputStream i = null;
		
		try {
			m = new URL(url);
			i = (InputStream) m.getContent();
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e){
			e.printStackTrace();
		}
		Drawable d = Drawable.createFromStream(i, "src");
		return d;
		
	}
	
	public interface ImageCallback{
		public void imageLoaded(Drawable imageDrawable, String imageUrl);
	}
	
}
